Actividades de Optimización
1)¿Qué se entiende por hediondez del código? Pon al menos 5 ejemplos.
En programación, la hediondez del código (también conocida como code smell) es cualquier síntoma en el código fuente de un programa que posiblemente indica un problema más profundo. Las hediondeces del código usualmente no son[ bugs de programación, no son técnicamente incorrectos y en realidad no impiden que el programa funcione correctamente. En cambio, indican deficiencias en el diseño de software que pueden ralentizar el desarrollo o aumentar el riesgo de errores o fallos en el futuro. Ejemplos son:
- Código duplicado: Existe código idéntico o muy similar en más de una ubicación.
- Método grande: Un método, función o procedimiento que ha crecido hasta hacerse demasiado grande.
- Clase grande: Una clase que ha crecido hasta hacerse demasiado grande.
- Demasiados parámetros: Una larga lista de parámetros de un procedimiento o función empeora la legibilidad y la calidad del código.
- Envidia de características: Una clase que usa excesivamente métodos de otra clase.
2)¿Qué tipo de herramienta utilizamos para hacer análisis estático del código?
El análisis de código estático consta de una serie de comprobaciones automatizadas que se realizan en el código fuente. Una herramienta de análisis estático escanea el código en busca de errores y vulnerabilidades comunes conocidas, como fugas de memoria o desbordamientos de búfer. Algunas de las herramientas de análisis estático del código más destacables son:
-SonarQube: Es un software open source que permite hacer análisis estáticos del código. Obtiene métricas que permiten mejorar la calidad del código y descubrir evidencias de los problemas existentes en el código.
-FindBugs: Es un analizador de código estático de código abierto. Detecta posibles errores en los programas de Java y los clasifica según la gravedad que presenten, por lo que ayuda a detectar cuales tienen mayor impacto en el desarrollo del programa.
-PMD: Es un analizador de código fuente. Encuentra fallas de programación comunes como variables no utilizadas, bloques catch vacíos, creación de objetos innecesarios, etc.
-Lint: Es una herramienta a cargo de la mejora del código a través del análisis del código fuente, con el objetivo de identificar fallos o problemas en el sistema.
3)¿Qué sitios web nos permiten hacer análisis estático del código o Continuous Inspection?
Algunos de los sitios web que nos permiten hacer análisis estático del código son:
-Review Board: Es una herramienta de código abierto basada en la web para la revisión de códigos que te permite realizar revisiones de código antes y después de la autorización, además proporciona una comparación gráfica de los cambios en tu código.
-Crucible: Es un conjunto de herramientas comerciales que permite revisar el código, discutir cambios en los planes e identificar errores en una serie de sistemas de control de versiones. Soporta un gran número de sistemas de control de versiones y te permite hacer comentarios en línea dentro de la vista de diferencias para señalar exactamente a qué quieres referirte específicamente.
-Phabricator: Es una lista de herramientas de código abierto de Phacility que te ayudan a revisar el código. Mientras que puedes descargar e instalar el conjunto de herramientas de revisión de código en tu servidor, Phacility también proporciona una versión en la nube de Phabricator.
-Collaborator: Es una herramienta de revisión de códigos y documentos para equipos de desarrollo. Permite a los equipos revisar los documentos de diseño, soporta un gran número de sistemas de control de versiones, permite la presentación de informes y el análisis de métricas clave relacionadas con su proceso de revisión de códigos y, además, ayuda en la gestión de la auditoría y el seguimiento de errores.
4) Instala en Netbeans el plugin SpotBugs, si no lo tienes aún instalado.
5) Realiza análisis estático de código para las clases del proyecto con bucle infinito.
6) Indica al menos un code smell relevante de cada clase. Explica cómo podría solucionarse.
Clase Customer: "Feature envy": esta clase tiene una gran cantidad de atributos que pertenecen a la clase "Order", lo que indica que hay una posible violación del principio de responsabilidad única (SRP). Para solucionar esto, se podría mover la lógica de la clase "Order" a una nueva clase, lo que permitiría que ambas clases se encarguen de su propia lógica.
Clase Product: "Divergent change": esta clase tiene una gran cantidad de atributos que pueden estar relacionados con diferentes comportamientos o responsabilidades. Para solucionar esto, se podría considerar la posibilidad de dividir la clase en diferentes clases que se encarguen de comportamientos específicos.
Clase Order: "Shotgun surgery": esta clase tiene una gran cantidad de métodos que se encargan de diferentes aspectos de la lógica de la orden, lo que indica que un cambio en un método podría afectar a varios otros. Para solucionar esto, se podría considerar la posibilidad de mover algunos de los métodos a una nueva clase que se encargue específicamente de la lógica de la orden.
7)¿Qué es la refactorización?
La refactorización es un cambio realizado en la estructura interna del código del software para hacerlo más fácil de entender y más barato de modificar sin cambiar su comportamiento observable.
8)¿Qué técnicas se utilizan a menudo a la hora de refactorizar?
La refactorización se realiza a menudo como parte del proceso de desarrollo del software: los desarrolladores alternan la inserción de nuevas funcionalidades y casos de prueba con la refactorización del código para mejorar su consistencia interna y su claridad. Técnicas para refactorizar que se utilizan a menudo son:
- Simplificación de las llamadas a método
- Cambiar el nombre de los métodos.
- Añadir parámetros o eliminarlos.
- Sustituir parámetros por métodos explícitos.
- Sustituir código defectuoso por excepciones.